/*
 * Fogo.cpp
 *
 *  Created on: 28/08/2008
 *      Author: samuel.grigolato
 */

#include "Fogo.h"

Fogo::Fogo() {
	ControleAnimacao.SetFrameRate(150);
	ControleAnimacao.Oscillate = true;
	TempoInicioContagem = SDL_GetTicks();
	PoderFogoBaixo = 0;
	PoderFogoCima = 0;
	PoderFogoEsquerda = 0;
	PoderFogoDireita = 0;
}

Fogo::~Fogo() {
	//
}

bool Fogo::Init(int posicaoX, int posicaoY) {
	CEntity::Init(posicaoX, posicaoY);

	if(OnLoad("./gfx/fogo.bmp", 35, 35, 2) == false) {
	    return false;
	}

	if (PoderFogoBaixo > 0) {
		int AnimState = 1;
		if (PoderFogoBaixo == 1) {
			AnimState += 4;
		}
		CriaFogo(0, +1, 0, PoderFogoBaixo - 1, 0, 0, AnimState);
	}
	if (PoderFogoCima > 0) {
		int AnimState = 3;
		if (PoderFogoCima == 1) {
			AnimState += 4;
		}
		CriaFogo(0, -1, PoderFogoCima - 1, 0, 0, 0, AnimState);
	}
	if (PoderFogoEsquerda > 0) {
		int AnimState = 2;
		if (PoderFogoEsquerda == 1) {
			AnimState += 4;
		}
		CriaFogo(-1, 0, 0, 0, PoderFogoEsquerda - 1, 0, AnimState);
	}
	if (PoderFogoDireita > 0) {
		int AnimState = 4;
		if (PoderFogoDireita == 1) {
			AnimState += 4;
		}
		CriaFogo(+1, 0, 0, 0, 0, PoderFogoDireita - 1, AnimState);
	}

	CEntity::EntityList->insert(CEntity::EntityList->begin(), this);

	return true;
}

void Fogo::OnLoop() {
	CEntity::OnLoop();
	ProcessaColisoes(FOGO);
	long tempoAtual = SDL_GetTicks();
	if ((tempoAtual - TempoInicioContagem) > 450) {
		Trash = true;
	}


}

void Fogo::CriaFogo(int DiferencaX, int DiferencaY, int PoderFogoCima, int PoderFogoBaixo,
		int PoderFogoEsquerda, int PoderFogoDireita, int AnimState) {

	int AlturaTile = CParametros::GetAlturaTile();
	int LarguraTile = CParametros::GetLarguraTile();

	Fogo* fogo;
	fogo = new Fogo();
	fogo->AnimState = AnimState;
	fogo->X = X + (DiferencaX * LarguraTile);
	fogo->Y = Y + (DiferencaY * AlturaTile);

	fogo->PoderFogoBaixo = PoderFogoBaixo;
	fogo->PoderFogoCima = PoderFogoCima;
	fogo->PoderFogoEsquerda = PoderFogoEsquerda;
	fogo->PoderFogoDireita = PoderFogoDireita;

	fogo->TileX = TileX + DiferencaX;
	fogo->TileY = TileY + DiferencaY;
	fogo->ProcessaColisoes(FOGO);

	if (fogo->RecuperaColisoes().size() == 0) {
		fogo->Init(TileX + DiferencaX, TileY + DiferencaY);
	}
}

void Fogo::ProcessaColisao(CEntity* Entidade, TipoColisao TpColisao) {
	//
}






